热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

核子|超文本_STM32天气数据获取

篇首语:本文由编程笔记#小编为大家整理,主要介绍了STM32天气数据获取相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了STM32天气数据获取相关的知识,希望对你有一定的参考价值。



STM32天气数据获取

  • 硬件资源

ESP8266无线上网模块、STM32系统板、OLED屏

  • 实现方式

ESP8266无线上网模块配置为STA+TCPClinet;

  • 通讯协议:HTTP
  • 天气数据获取:心知天气网


1.ESP8266WIFI简介

ESP8266是ai-thinker公司推出的一款无线WIFI模块,专为移动设备,可穿戴电子产品和物联应用设计,采用USART通讯,通过AT指令配置,和单片机上的串口进行通信,利用WIFI进行数据传输。ESP8266支持TCP和UDP模式,有AP模式、STA模式以及AP+STA并存模式。

  • STA+TCPClinet AT指令

const char *STA_TCPCLINET[]=
"AT\\r\\n",//测试指令
"ATE0\\r\\n",//关回显
"AT+CWMODE=1\\r\\n",//设置STA模式
"AT+RST\\r\\n",//模块复位
"ATE0\\r\\n",//关回显
"AT+CWJAP=\\"HUAWEIshui\\",\\"asdfghjkl12\\"\\r\\n",//连接wifi
"AT+CIPMUX=0\\r\\n",//设置单连接
"AT+CIFSR\\r\\n",//查询IP
"AT+CIPSTART=\\"TCP\\",\\"192.168.43.204\\",8080\\r\\n",//连接服务器
"AT+CIPMODE=1\\r\\n",//设置透传模式
"AT+CIPSEND\\r\\n",//开始发送数据
;

  • STA+TCPClinet 模式配置函数封装

u8 Esp8266_STA_TCPclinet_Init(u8 *wifi_name,u8 *wifi_key,u8 *server_ip,u16 server_port)
char buff[100];
/*退出透传模式*/
u8 i=0;
char *p=NULL;
for(i=0;i<5;i++)

Usartx_SendString(USART3,(u8 *)"+++");//退出透传模式
Delay_Ms(500);
if(Esp8266_SendCmdCheckStat("AT\\r\\n","OK\\r\\n")==0)

i=0;
break;


if(i!=0)

printf("退出透传模式失败\\r\\n");
return 0xff;

printf("1.发送测试指令\\r\\n");
if(Esp8266_SendCmdCheckStat("AT\\r\\n","OK\\r\\n"))return 1;
printf("2.关回显\\r\\n");
if(Esp8266_SendCmdCheckStat("ATE0\\r\\n","OK\\r\\n"))return 2;
printf("3.设置模式\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CWMODE=1\\r\\n","OK\\r\\n"))return 3;
printf("4.模块复位\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+RST\\r\\n","OK\\r\\n"))return 4;
Delay_Ms(1000);
Delay_Ms(1000);
printf("5.关回显\\r\\n");
if(Esp8266_SendCmdCheckStat("ATE0\\r\\n","OK\\r\\n"))return 5;

printf("6.连接WIFI\\r\\n");
if(ESP8266_ConectWifi(wifi_name,wifi_key))return 6;
printf("7.设置单连接\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0\\r\\n","OK\\r\\n"))return 7;
printf("8.查询IP地址\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CIFSR\\r\\n","OK\\r\\n"))return 8;
printf("ip:%s\\r\\n",usart3_rx_buff);//打印IP信息
/*
ip:+CIFSR:STAIP,"192.168.43.111"
+CIFSR:STAMAC,"84:f3:eb:a6:be:f9"
OK
*/
i=0;
p=strstr((char *)usart3_rx_buff,"STAIP,\\"");//查找字符串
if(p!=NULL)

p+=7;
while((*p!=") && (*p!=\\0))

buff[i++]=*p++;


buff[i]=\\0;
printf("ip:%s\\r\\n",buff);
snprintf(buff,sizeof(buff),"AT+CIPSTART=\\"TCP\\",\\"%s\\",%d\\r\\n",server_ip,server_port);
// printf("buff:%s\\r\\n",buff);
printf("9.连接服务器\\r\\n");
if(Esp8266_SendCmdCheckStat(buff,"OK\\r\\n"))return 9;
printf("配置透传模式\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1\\r\\n","OK\\r\\n"))return 10;
printf("开始发送数据\\r\\n");
if(Esp8266_SendCmdCheckStat("AT+CIPSEND\\r\\n",">"))return 11;
return 0;

2.HTTP协议

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

HTTP 是一个基于 TCP/IP 通信协议来传递数据( html 文件, 图片文件, 查询结果等)。工作于客户端-服务端架构上,默认端口号为 80,但是你也可以改为 8080或其它端口号。HTTP协议永远都是客户端发起请求,服务器回送响应。

STM32天气数据获取_ESP8266

3.天气数据获取平台

心知天气是中国气象局官方授权的商业气象服务公司,基于气象数值预报和人工智能技术,提供高精度气象数据、天气监控机器人、气象数据可视化产品,本次天气数据获取从心知天气网平台获取。

  • 3.1 实现步骤

1.创建心知天气个人账户

平台地址:​​https://www.seniverse.com/​​

STM32天气数据获取_天气获取_02

2.选择产品->天气数据接口,免费试用。

STM32天气数据获取_STM32_03

3.选择免费申请,激活。

STM32天气数据获取_ESP8266_04

激活成功后即可看到公钥和私钥,这个参数在后面获取数据是需要用到。

STM32天气数据获取_天气获取_05

4.HTTP方式获取天气数据

STM32天气数据获取_ESP8266_06

STM32天气数据获取_ESP8266_07

  • 接口说明

https://api.seniverse.com/v3/weather/now.json?key=SwD4-aaQxhedD1z7U&location=beijing&language=zh-Hans&unit=c
“api.seniverse.com” -- 平台访问域名
“SwD4-aaQxhedD1z7U” --个人私有秘钥
“beijing” --要获取的城市名称
“zh-Hans” --获取到的数据语言(zh-Hans为简体中文)

STM32天气数据获取_ESP8266_08

  • 平台返回数据

STM32天气数据获取_ESP8266_09

5.功能实现

心知的 API 目前基于 http 协议,域名是 ​​​​api.seniverse.com​​​​,端口是缺省的 80(http)和 443(https)。

int main()
u8 stat=0;
u16 cnt=0;
Beep_Init();//蜂鸣器初始化
Led_Init();//LED初始化
Key_Init();//按键初始化
Usartx_Init(USART1,115200,72);
Usartx_Init(USART2,9600,36);//蓝牙默认9600
Usartx_Init(USART3,115200,36);//WIFI默认115200
TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
TIMx_Init(TIM3,72,20000);//TIM3辅助串口2数据接收,20ms接收一帧数据
TIMx_Init(TIM4,72,20000);//TIM4辅助串口3数据接收,20ms接收一帧数据
printf("wifi Init\\r\\n");
count++;
cnt++;
DelayMs(10);
if(count>=500)

count=0;
USARTx_Sendstr(USART3,"GET https://api.seniverse.com/v3/weather/now.json?key=SwD4-ybQxhedD1z7U&location=jiangxi nanchang&language=en&unit=c\\n");
// USARTx_Sendstr(USART3,"GET https://api.seniverse.com/v3/weather/grid/minutely.json?key=SwD4-ybQxhedD1z7U&location=114.38:27.80\\n");

if(usart3_flag)

usart3_rx_buff[usart3_cnt]=\\0;
weather_show_stat=1;
//printf("%s\\r\\n",usart3_rx_buff);
/*
"results":["location":"id":"WSCQ4UBFXPTE","name":"Yichun","country":"CN",
"path":"Yichun,Yichun,Jiangxi,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00",
"now":"text":"Sunny","code":"0","temperature":"36","last_update":"2020-08-03T14:00:00+08:00"]
*/
if(key==0)

/*解析天气数据*/
stat=Weather_analysis(usart3_rx_buff,(u8 *)"\\"name\\"",(u8 *)buff);//城市名称
if(!stat)

OLED_Display_str((127-48-strlen(buff)*8)/2,4,(u8 *)buff);

stat=Weather_analysis(usart3_rx_buff,(u8 *)"\\"temperature\\"",(u8 *)buff);//获取温度
if(!stat)

OLED_Display_str(127-26,6,(u8 *)" ");
OLED_Display_str(127-20-strlen(buff)*8,6,(u8 *)buff);
OLED_Display_Flont(127-20,6,4);//显示℃

stat=Weather_analysis(usart3_rx_buff,(u8 *)"\\"code\\"",(u8 *)buff);//天气代码
if(!stat)

sscanf(buff,"%d",(int *)&cnt);
//printf("cnt=%d\\n",cnt);
switch(cnt)

case 0://晴
case 1://晚上晴
OLED_Dislay_Bmp(127-48,0,48,48,bmp_0);
break;
case 4://多云
OLED_Dislay_Bmp(127-48,0,48,48,bmp_4);
break;
case 5://晴转多云
OLED_Dislay_Bmp(127-48,0,48,48,bmp_5);
break;
case 6:
case 7:
case 8:
case 9://阴
OLED_Dislay_Bmp(127-48,0,48,48,bmp_9);
break;
case 10://阵雨
case 11://雷阵雨
case 13:
case 14://雨
case 15:
case 16://大雨
case 17:
case 18://暴雨
OLED_Dislay_Bmp(127-48,0,48,48,bmp_14);
break;
default:
OLED_Dislay_Bmp(127-48,0,48,48,bmp_0);
break;



usart3_flag=0;
usart3_cnt=0;

  • 解析天气数据函数

通HTTP访问天气数据接口,获取实时天气数据,进行数据解析。

STM32天气数据获取_ESP8266_10

/******************解析 天气数据****************
形参:u8* buff原始数据
u8 *Weather_stat天气数据标志
u8 *data解析获取到的数据
返回值:0---成功,其他值---失败
************************************************/
u8 Weather_analysis(u8* buff,u8 *Weather_stat,u8 *data)
char *p=NULL;
u16 i=0;
p=strstr((char *)buff,(char *)Weather_stat);//获取温度
if(p)

p+=strlen((char *)Weather_stat)+2;
i=0;
while(*p!=\\" && *p!=\\0)

data[i++]=*p++;

data[i]=\\0;
return 0;

else return 1;

  • 相关图标制作

心知天气网中提供有天气相关图标,可实现天气图标制作。

STM32天气数据获取_天气获取_11

4.实现效果

STM32天气数据获取_串口协议_12


推荐阅读
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
author-avatar
手机用户2602931615
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有